import java.util.Scanner;
/**
 * Created by L.jp
 * Description:
 *  今年公司年会的奖品特别给力，但获奖的规矩却很奇葩：
 * 1. 首先，所有人员都将一张写有自己名字的字条放入抽奖箱中；
 * 2. 待所有字条加入完毕，每人从箱中取一个字条；
 * 3. 如果抽到的字条上写的就是自己的名字，那么“恭喜你，中奖了！”
 * 现在告诉你参加晚会的人数，请你计算有多少概率会出现无人获奖？
 *
 * 输入描述:
 * 输入包含多组数据，每组数据包含一个正整数n（2≤n≤20）。
 *
 *
 * 输出描述:
 * 对应每一组数据，以“xx.xx%”的格式输出发生无人获奖的概率。
 * User: 86189
 * Date: 2022-04-02
 * Time: 18:31
 */
public class Main {
    //这是一个经典的数学错排问题，无人获奖就是所有人都拿错了纸条
    //那么这么多人一共右多少种情况呢
    // 1.首先所有的情况是：
    //N个人对应N张纸条，
    //如果第一个人有N个选择的机会，那么第二个人就有N-1个选择的机会，第三个人有N-1个选择机会，以此类推，最后一个人只有一个机会。
    //这其实是排列组合的知识点。
    //所以：总的可能数=N*（N-1）（N-2）…*1  这就是阶乘的公式

     //  2.那么错排的情况就是：
     //如果一个人不能拿自己名字的纸条，那么他可以拿任意剩下的N-1张，
    //比如，第1个人拿了第k个人的纸条，第k个人拿了第1个人的纸条，只需将剩下的N-2个人和N-2个纸条错排。
    //第1个人拿了第k个人的纸条**，但是第k个人没有拿第1个人的纸条，只需将N-1个人和N-1个纸条错排。
    //N个元素的错排总数为F（N）
    //由递推可得,F(N)=(N-1)[(N-2)+(N-1)]
    public static void main(String[] args) {
       //首先把所有情况的放在一个数组里面 ,最多20个人的情况
        long all[]=new long[21];  //表示i个人的排列情况数
        all[0]=all[1]=1;  //阶乘初始值必须为1,一个人只有1种情况
        all[2]= 2;//两个人有两种情况

        //错排可能情况数据
        long stagger[]=new long[21];  //表示i个人的错排情况数
        stagger[0]=stagger[1]=0; //无论是0个人还是1个人，都没有错排的情况
        stagger[2] =1; //两个人只有1只错排情况，那就是交换
        //接着构造数组
        for(int i = 3; i < 21; i++){
            all[i]=i*all[i-1];
            stagger[i]=(i-1)*(stagger[i-1]+stagger[i-2]);
        }
        //输入
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n=scanner.nextInt();
            //输出%号需要两个%转义
            System.out.printf("%.2f%%\n",100.0*stagger[n]/all[n]);
        }
    }
}
